/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 *
 * @author Jonatas
 */
public class LigacoesDestino implements Comparable <LigacoesDestino> {

    private Telefone destino;
    private int qtdeLigacoes;
    private int tempoTotalSeg;
    private double valorTotal;

    public static List<LigacoesDestino> findLigacoesDestino(List<Ligacao> ligacoes) {

        Collections.sort(ligacoes, new ComparatorLigacaoDestino());
        List<LigacoesDestino> ligacoesParaMesmoDesitino = new ArrayList<LigacoesDestino>();

        Telefone destinoAtual = null;

        int tempoTotalAtual = 0;
        int numLigacoes = 0;
        double valorAtual = 0.0;

        for (Ligacao lig : ligacoes) {

            if (!lig.getDestino().equals(destinoAtual)) {

                if (destinoAtual == null) {

                    destinoAtual = lig.getDestino();

                } else {

                    LigacoesDestino ligacaoDestino = new LigacoesDestino(destinoAtual, numLigacoes, tempoTotalAtual, valorAtual);
                    ligacoesParaMesmoDesitino.add(ligacaoDestino);

                    destinoAtual = lig.getDestino();

                }

                if (lig.isACobrar()) {
                    tempoTotalAtual = lig.getDuracaoLigacaoACobrarSegundos();
                } else {
                    tempoTotalAtual = lig.getDuracaoLigacaoSegundos();
                }
                numLigacoes = 1;
                valorAtual = lig.getCusto();

            } else {
                if (lig.isACobrar()) {
                    tempoTotalAtual += lig.getDuracaoLigacaoACobrarSegundos();
                } else {
                    tempoTotalAtual += lig.getDuracaoLigacaoSegundos();
                }
                numLigacoes++;
                valorAtual += lig.getCusto();
            }

        }

        LigacoesDestino ligacaoDestino = new LigacoesDestino(destinoAtual, numLigacoes, tempoTotalAtual, valorAtual);
        ligacoesParaMesmoDesitino.add(ligacaoDestino);

        return ligacoesParaMesmoDesitino;
    }

    public LigacoesDestino(Telefone destino, int qtdeLigacoes, int tempoTotalSeg, double valorTotal) {
        this.destino = destino;
        this.qtdeLigacoes = qtdeLigacoes;
        this.tempoTotalSeg = tempoTotalSeg;
        this.valorTotal = valorTotal;
    }

    public Telefone getDestino() {
        return destino;
    }

    public void setDestino(Telefone destino) {
        this.destino = destino;
    }

    public int getQtdeLigacoes() {
        return qtdeLigacoes;
    }

    public void setQtdeLigacoes(int qtdeLigacoes) {
        this.qtdeLigacoes = qtdeLigacoes;
    }

    public int getTempoTotalSeg() {
        return tempoTotalSeg;
    }

    public void setTempoTotalSeg(int tempoTotalSeg) {
        this.tempoTotalSeg = tempoTotalSeg;
    }

    public double getValorTotal() {
        return valorTotal;
    }

    public void setValorTotal(double valorTotal) {
        this.valorTotal = valorTotal;
    }

    public String getTempoTotalHoras() {
        return EntradaAbstrata.getDuracaoHoras(tempoTotalSeg);
    }

    public int compareTo(LigacoesDestino o) {

        return -(new Double(valorTotal).compareTo(new Double(o.valorTotal)));

    }
}
